En este trabajo se abordará el problema de agrupar los barrios de Medellín de acuerdo a distintas dimensiones y analizar espacialmente las agrupaciones.

** Dimensión Movilidad **

La dimensión Movilidad mide determina en la encuesta de Calidad de Vida, cómo se mueven los Medellinenses. Asi mismo, el tiempo que les toma ir a trabajar, el medio de transporte predominante de las personas que trabajan y la percepción sobre la malla vial, cobertura y calidad del transporte público.

Librerias escenciales para el analisis de informacion

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(Utiltae)
library(lazyeval)
library('sqldf')
## Loading required package: gsubfn
## Loading required package: proto
## Loading required package: RSQLite
library(rgdal)
## Loading required package: sp
## rgdal: version: 1.4-8, (SVN revision 845)
##  Geospatial Data Abstraction Library extensions to R successfully loaded
##  Loaded GDAL runtime: GDAL 2.2.3, released 2017/11/20
##  Path to GDAL shared files: C:/Users/sanar/OneDrive/Documentos/R/win-library/3.6/rgdal/gdal
##  GDAL binary built with GEOS: TRUE 
##  Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493]
##  Path to PROJ.4 shared files: C:/Users/sanar/OneDrive/Documentos/R/win-library/3.6/rgdal/proj
##  Linking to sp version: 1.3-2

El insumo principal de este trabajo son los datos abiertos del portal Medata y en particular la Encuesta de Calidad de Vida Medellín Cómo vamos.

ECV <- read.csv("./dataSet/encuesta_calidad_vida.csv", header = TRUE, sep=";", encoding = "UTF-8")

Se procede a normalizar las cabeceras del dataframe del set de datos

ECV <- setNames(ECV,set_dataSet_names(names(ECV)))
  1. Caracterización de las dimensiones para la dimensión ALIMENTACION
#summary(ECV)

Para la dimensión de MOVILIDAD se toman las preguntas: P_83 ¿Cuál es el medio de transporte utilizado predominante para dirigirse al sitio de su empleo principal? P_84 ¿Cuánto tiempo tardan en llegar al sitio de trabajo? P_212 ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Vehiculo o auto P_213 ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Moto o motoneta P_214 ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Bicicleta P_318 Califique Usted en una escala desde 1 hasta 5, la situación en su barrio o vereda, sobre: La pavimentación y señalización de las vias P_321 Califique Usted, en una escala desde 1 hasta 5, la cobertura en el transporte público en su sector, barrio o vereda en los últimos 12 meses P_322 Y califique en una escala desde 1 hasta 5, la calidad de ese transporte público en su sector, barrio o vereda

ECV_MOVILIDAD<- ECV[,c("encuesta","comuna","barrio","estrato","p_83","p_84","p_212","p_213","p_214","p_318","p_321","p_322")]

Revisemos como es el comportamiento de los datos seleccionados

summary(ECV_MOVILIDAD)
##     encuesta                     comuna                            barrio      
##  Min.   :1.201e+04   MANRIQUE       : 28951   CABECERA SAN ANT DE PR. :  8987  
##  1st Qu.:5.812e+07   BELEN          : 26330   LAS GRANJAS             :  5192  
##  Median :4.713e+08   ARANJUEZ       : 24860   MORAVIA                 :  4537  
##  Mean   :1.424e+09   POPULAR        : 22587   SANTO DOMINGO SABIO Nº 1:  4152  
##  3rd Qu.:1.592e+09   ROBLEDO        : 22051   POPULAR                 :  4027  
##  Max.   :7.489e+09   DOCE DE OCTUBRE: 21787   CASTILLA                :  3873  
##                      (Other)        :184008   (Other)                 :299806  
##     estrato           p_83             p_84            p_212       
##  Min.   :1.000   Min.   :-99.00   Min.   :-99.00   Min.   :0.0000  
##  1st Qu.:2.000   1st Qu.:-88.00   1st Qu.:-88.00   1st Qu.:0.0000  
##  Median :2.000   Median :-88.00   Median :-88.00   Median :0.0000  
##  Mean   :2.701   Mean   :-51.65   Mean   :-51.92   Mean   :0.1965  
##  3rd Qu.:3.000   3rd Qu.:  4.00   3rd Qu.:  1.00   3rd Qu.:0.0000  
##  Max.   :6.000   Max.   : 12.00   Max.   :  5.00   Max.   :6.0000  
##                                                                    
##      p_213            p_214            p_318           p_321      
##  Min.   :0.0000   Min.   :0.0000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:4.000  
##  Median :0.0000   Median :0.0000   Median :4.000   Median :4.000  
##  Mean   :0.2356   Mean   :0.2596   Mean   :3.402   Mean   :3.828  
##  3rd Qu.:0.0000   3rd Qu.:0.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :5.0000   Max.   :9.0000   Max.   :5.000   Max.   :5.000  
##                                                                   
##      p_322      
##  Min.   :1.000  
##  1st Qu.:4.000  
##  Median :4.000  
##  Mean   :3.808  
##  3rd Qu.:4.000  
##  Max.   :5.000  
## 

Eliminamos las filas dónde todas las columnas sean NULL

ECV_MOVILIDAD_DEP <- subset(ECV_MOVILIDAD,p_83 != 'NULL' & p_84 != 'NULL' & p_212 != 'NULL' & p_213 != 'NULL' & p_214 != 'NULL' & p_318 != 'NULL' & p_321 != 'NULL' & p_322 != 'NULL')
nrow(ECV_MOVILIDAD_DEP)
## [1] 330574
summary(ECV_MOVILIDAD_DEP)
##     encuesta                     comuna                            barrio      
##  Min.   :1.201e+04   MANRIQUE       : 28951   CABECERA SAN ANT DE PR. :  8987  
##  1st Qu.:5.812e+07   BELEN          : 26330   LAS GRANJAS             :  5192  
##  Median :4.713e+08   ARANJUEZ       : 24860   MORAVIA                 :  4537  
##  Mean   :1.424e+09   POPULAR        : 22587   SANTO DOMINGO SABIO Nº 1:  4152  
##  3rd Qu.:1.592e+09   ROBLEDO        : 22051   POPULAR                 :  4027  
##  Max.   :7.489e+09   DOCE DE OCTUBRE: 21787   CASTILLA                :  3873  
##                      (Other)        :184008   (Other)                 :299806  
##     estrato           p_83             p_84            p_212       
##  Min.   :1.000   Min.   :-99.00   Min.   :-99.00   Min.   :0.0000  
##  1st Qu.:2.000   1st Qu.:-88.00   1st Qu.:-88.00   1st Qu.:0.0000  
##  Median :2.000   Median :-88.00   Median :-88.00   Median :0.0000  
##  Mean   :2.701   Mean   :-51.65   Mean   :-51.92   Mean   :0.1965  
##  3rd Qu.:3.000   3rd Qu.:  4.00   3rd Qu.:  1.00   3rd Qu.:0.0000  
##  Max.   :6.000   Max.   : 12.00   Max.   :  5.00   Max.   :6.0000  
##                                                                    
##      p_213            p_214            p_318           p_321      
##  Min.   :0.0000   Min.   :0.0000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:4.000  
##  Median :0.0000   Median :0.0000   Median :4.000   Median :4.000  
##  Mean   :0.2356   Mean   :0.2596   Mean   :3.402   Mean   :3.828  
##  3rd Qu.:0.0000   3rd Qu.:0.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :5.0000   Max.   :9.0000   Max.   :5.000   Max.   :5.000  
##                                                                   
##      p_322      
##  Min.   :1.000  
##  1st Qu.:4.000  
##  Median :4.000  
##  Mean   :3.808  
##  3rd Qu.:4.000  
##  Max.   :5.000  
## 

Definiciones:

Solucion de Preguntas - Consultas

Dimensión Movilidad.

P_83: ¿Cuál es el medio de transporte utilizado predominante para dirigirse al sitio de su empleo principal? Indicador: Porcentaje de personas que usan bicicleta para ir a su empleo principal Formula: Total de personas BICICLETA / Total Encuestados P_83 *100

# CAST((SUM(p_83) / totalEncuestadosE * 100) AS DOUBLE)

ECV_MOVILIDAD_P83 <- get_indicadores_ei(ECV_MOVILIDAD_DEP,'p_83')
CONS_P83 <- sqldf("SELECT comuna, barrio, CAST (SUM(totalRespuestaE) AS REAL) / TotalB *100 AS P83_IND
                  FROM ECV_MOVILIDAD_P83  
                  WHERE p_83 = '2' 
                  GROUP BY comuna, barrio")
#CONS_P83["ind"] <- CONS_P83$`SUM(totalRespuestaE)` / CONS_P83$TotalB * 100

P_84: ¿Cuánto tiempo tardan en llegar al sitio de trabajo? Indicador: Porcentaje de personas que tardan en llegar al trabajo mas de una hora Formula: Sumatoria de los tiempos / Total Encuestados P_84

ECV_MOVILIDAD_P84 <- get_indicadores_ei(ECV_MOVILIDAD_DEP,'p_84')
CONS_P84 <- sqldf("SELECT comuna, barrio, CAST (SUM(totalRespuestaE) AS REAL) / TotalB *100 AS P84_IND
                  FROM ECV_MOVILIDAD_P84  
                  WHERE p_84 = '4' OR p_84 = '5' 
                  GROUP BY comuna, barrio")
#CONS_P84["P84_IND"] <- CONS_P84$`SUM(totalRespuestaE)` / CONS_P84$TotalB * 100

P_212: ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Vehiculo o auto Indicador: Promedio de vehiculos en el hogar (Vehiculo o auto) Formula: Sumatoria de las respuestas Vehiculo o auto / Total Encuestados P_212

ECV_MOVILIDAD_P212 <- get_indicadores_ec(ECV_MOVILIDAD_DEP,'p_212')
CONS_P212 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_212) as real)*(totalRespuestaE))/TotalB AS P212_IND
                  FROM ECV_MOVILIDAD_P212  
                  WHERE p_212 > 0 
                  GROUP BY comuna, barrio")
#CONS_P212["ind"] <- CONS_P212$nuevo

P_213: ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Moto o motoneta Indicador: Promedio de vehiculos en el hogar (Moto) Formula: Sumatoria de las respuestas Moto / Total Encuestados P_213

ECV_MOVILIDAD_P213 <- get_indicadores_ec(ECV_MOVILIDAD_DEP,'p_213')
CONS_P213 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_213) as real)*(totalRespuestaE))/TotalB AS P213_IND 
                  FROM ECV_MOVILIDAD_P213  
                  WHERE p_213 > 0
                  GROUP BY comuna, barrio")
#CONS_P212["ind"] <- CONS_P213$`SUM(p_213)` / CONS_P213$`SUM(totalEncuestadosE)` 
#ECV_MOVILIDAD_P213 %>% group_by(barrio) %>% summarise(sum(p_213 * totalRespuestaE)/sum(totalRespuestaE)  ) -> data_hogar

P_214: ¿Cuántos vehículos particulares en funcionamiento tiene este hogar? (no incluye vehículo de servicio público o utilizado para generar ingresos) Bicicleta Indicador: Promedio de vehiculos en el hogar (Bicicleta) Formula: Sumatoria de las respuestas Bicicleta / Total Encuestados P_214

ECV_MOVILIDAD_P214 <- get_indicadores_ec(ECV_MOVILIDAD_DEP,'p_214')
CONS_P214 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_214) as real)*(totalRespuestaE))/TotalB AS P214_IND 
                  FROM ECV_MOVILIDAD_P214  
                  WHERE p_214 > 0
                  GROUP BY comuna, barrio")

P_318: Califique Usted en una escala desde 1 hasta 5, la situación en su barrio o vereda, sobre: La pavimentación y señalización de las vias Indicador: Calificación promedio del estado de la infraestrucutra vial Formula: Sumatoria de las Calificaciones / Total Encuestados P_318

ECV_MOVILIDAD_P318 <- get_indicadores_ei(ECV_MOVILIDAD_DEP,'p_318')
CONS_P318 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_318) as real)*(totalRespuestaE)) / sum(totalRespuestaE) AS P318_IND 
                  FROM ECV_MOVILIDAD_P318  
                  WHERE p_318 > 0
                  GROUP BY comuna, barrio")

P_321: Califique Usted, en una escala desde 1 hasta 5, la cobertura en el transporte público en su sector, barrio o vereda en los últimos 12 meses Indicador: Calificación promedio de la cobertura del transporte público Formula: Sumatoria de las respuestas “Muy buena” / Total Encuestados P_321 *100

ECV_MOVILIDAD_P321 <- get_indicadores_ei(ECV_MOVILIDAD_DEP,'p_321')
CONS_P321 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_321) as real)*(totalRespuestaE)) / sum(totalRespuestaE) AS P321_IND 
                  FROM ECV_MOVILIDAD_P321  
                  WHERE p_321 > 0
                  GROUP BY comuna, barrio")

P_322: Y califique en una escala desde 1 hasta 5, la calidad de ese transporte público en su sector, barrio o vereda Indicador: Porcentaje de personas que piensan que la calidad del transporte publico en el sector es “Aceptable” Formula: Sumatoria de las respuestas Aceptable" / Total Encuestados P_322 *100

ECV_MOVILIDAD_P322 <- get_indicadores_ei(ECV_MOVILIDAD_DEP,'p_322')
CONS_P322 <- sqldf("SELECT comuna, barrio, SUM(cast ((p_322) as real)*(totalRespuestaE)) / sum(totalRespuestaE) AS P322_IND 
                  FROM ECV_MOVILIDAD_P322  
                  WHERE p_322 > 0
                  GROUP BY comuna, barrio")
ECV_MOVILIDAD_FINAL <- data.frame(unique(ECV_MOVILIDAD[,c("comuna", "barrio")]))
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P83, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P84, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P212, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P213, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P214, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P318, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P321, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL <- merge(ECV_MOVILIDAD_FINAL, CONS_P322, by = c("comuna", "barrio"), all.x = TRUE)
ECV_MOVILIDAD_FINAL[is.na(ECV_MOVILIDAD_FINAL)] <- 0
ECV_MOVILIDAD_FINAL$barrio <- paste(ECV_MOVILIDAD_FINAL$comuna, ECV_MOVILIDAD_FINAL$barrio, sep = "/")
ECV_MOVILIDAD_FINAL$comuna <- NULL

Fin Preguntas

Agrupamiento

K-MEANS

Normalizamos los datos

ECV_MOVILIDAD_SCALE <-  tibble::column_to_rownames(ECV_MOVILIDAD_FINAL, var = ("barrio"))
ECV_MOVILIDAD_SCALE <-  scale(ECV_MOVILIDAD_SCALE)
#any(is.na(ECV_MOVILIDAD_FINAL))
#any(is.finite(ECV_VIVIENDA_BARRIO_SCALE))

Método del codo para determinar el k optimo

library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
# Elbow method
fviz_nbclust(ECV_MOVILIDAD_SCALE, kmeans, method = "wss") +
    geom_vline(xintercept = 4, linetype = 2)+
  labs(subtitle = "Elbow method")

De acuerdo a la gráfica, donde se da el k con el mínimo error es cuando toma el valor de 4

Método de la siluetta para determinar el k óptimo

fviz_nbclust(ECV_MOVILIDAD_SCALE, kmeans, method = "silhouette")

De acuerdo a la gráfica, donde se da el k con el mínimo error es cuando toma el valor de 2

# Gap statistic
# nboot = 50 to keep the function speedy. 
# recommended value: nboot= 500 for your analysis.
# Use verbose = FALSE to hide computing progression.
# The gap statistic compares the total intracluster variation for different values of k with their expected values under null reference distribution of the data (i.e. a distribution with no obvious clustering). The reference dataset is generated using Monte Carlo simulations of the sampling process. 


set.seed(123)
fviz_nbclust(ECV_MOVILIDAD_SCALE, kmeans, nstart = 50,  method = "gap_stat", nboot = 50)+
  labs(subtitle = "Gap statistic method")

SS <- fviz_nbclust(ECV_MOVILIDAD_SCALE, kmeans, nstart = 50,  method = "wss", nboot = 50)
plot(2:10, diff(SS$data$y), type="h", main="Diferencia de Errores", xlab="k", ylab="diff")

Aplicamos K-MEANS para el k recomendado por el método del codo

set.seed(42)
kmeans_model <- kmeans(ECV_MOVILIDAD_SCALE, 5, nstart = 50)
#kmeans_model

Agregar el cluster a la data original

df_member <- cbind(ECV_MOVILIDAD_FINAL, cluster = kmeans_model$cluster)
head(df_member)

Visualización de los grupos

fviz_cluster(kmeans_model, data = ECV_MOVILIDAD_SCALE, geom = "point")

 fviz_cluster(kmeans_model, ECV_MOVILIDAD_SCALE, ellipse.type = "norm", geom = "point")
## Too few points to calculate an ellipse
## Too few points to calculate an ellipse

# Cluster size
kmeans_model$size
## [1] 173   2 101  33   1
aggregate(ECV_MOVILIDAD_FINAL, by=list(cluster=kmeans_model$cluster), mean)
## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

## Warning in mean.default(X[[i]], ...): argument is not numeric or logical:
## returning NA

Mapas

library(stringr)
library(tidyr)
#df_ <- str_split_fixed(df_member$barrio, "-", 2)
#head(df_)

#within(df_member, FOO<-data.frame(do.call('rbind', strsplit(as.character(df_member$barrio), '-', fixed=TRUE))))

df_member2 <- separate(df_member, 'barrio', paste("barrio", 1:2, sep="_"), sep="/", extra="drop")
barrios_med <- readOGR("Barrio_Vereda/Barrio_Vereda.shp",layer="Barrio_Vereda")
## OGR data source with driver: ESRI Shapefile 
## Source: "D:\UNAL\Tecnicas de aprendizaje estadistico\Trabajo 1\TAE_T1\Barrio_Vereda\Barrio_Vereda.shp", layer: "Barrio_Vereda"
## with 332 features
## It has 6 fields
## Integer64 fields read as strings:  OBJECTID SUBTIPO_BA
nombres_barrios <- iconv(barrios_med@data$NOMBRE,"UTF-8","ISO_8859-1")
#head(nombres_barrios)
sub_ <- df_member2[,c("barrio_2","cluster")]
rownames(sub_) <- NULL
#head(sub_)

Convertimos a minúsculas

sub_$barrio_2 <- tolower(sub_$barrio_2)
#head(sub_)
#sub_$barrio_2[which(sub_$barrio_2=="º ")] <- "o."
# Create replacements data frame
library(DataCombine)
Replaces <- data.frame(from = c("º ", "ú", "ó", "í", "é", "á", "Á", "ñ"), to = c("o.", "ú", "ó", "Ã", "é", "á", "Ã\u0081", "ñ"))
sub_ <- FindReplace(data = sub_, Var = "barrio_2", replaceData = Replaces,
                     from = "from", to = "to", exact = FALSE)
head(sub_)
Caps <- function(x) {

  s <- strsplit(x, " ")[[1]]

  paste(toupper(substring(s, 1,1)), substring(s, 2),

        sep="", collapse=" ")

}


sub_$barrio_2 <- sapply(sub_$barrio_2, Caps)
#head(sub_)
sub_$barrio_2[sub_$barrio_2 == "Barrios De Jesús"] <- "Barrios de Jesús"
sub_$barrio_2[sub_$barrio_2 == "Piedras Blancas"] <- "Piedras Blancas - Matasano"
sub_$barrio_2[sub_$barrio_2 == "Area Expansion San Antonio De Prado"] <- "Ã\u0081rea de Expansión San Antonio de Prado"
sub_$barrio_2[sub_$barrio_2 == "Prado"] <- "San Antonio de Prado"
sub_$barrio_2[sub_$barrio_2 == "Altavista Central"] <- "Altavista Sector Central"
sub_$barrio_2[sub_$barrio_2 == "San José Del Manzanillo"] <- "San José del Manzanillo"
sub_$barrio_2[sub_$barrio_2 == "El Yolombo"] <- "Yolombo"
sub_$barrio_2[sub_$barrio_2 == "Urquita"] <- "Urquitá"
sub_$barrio_2[sub_$barrio_2 == "Corregimiento Palmitas"] <- "Palmitas Sector Central"
sub_$barrio_2[sub_$barrio_2 == "San Jose De La Montaña"] <- "San José de La Montaña"
sub_$barrio_2[sub_$barrio_2 == "Cabecera San Cristóbal"] <- "Cabecera Urbana Corregimiento San Cristóbal"
sub_$barrio_2[sub_$barrio_2 == "Area Expansion Pajarito"] <- "Área de Expansión Pajarito"
sub_$barrio_2[sub_$barrio_2 == "Area De Expancion San Cristobal"] <- "Área de Expansión San Cristóbal"
sub_$barrio_2[sub_$barrio_2 == "Santa Maria De Los ángeles"] <- "Santa Mar�a de Los Ángeles"
sub_$barrio_2[sub_$barrio_2 == "Juan Pablo Ii"] <- "Parque Juan Pablo II"
sub_$barrio_2[sub_$barrio_2 == "Bombona No.1"] <- "Bomboná No.1"
sub_$barrio_2[sub_$barrio_2 == "Bombona No.2"] <- "Bomboná No.2"
sub_$barrio_2[sub_$barrio_2 == "La Asomadera No.1"] <- "Asomadera No.1"
sub_$barrio_2[sub_$barrio_2 == "La Asomadera No.2"] <- "Asomadera No.2"
sub_$barrio_2[sub_$barrio_2 == "Los Cerros El Verjel"] <- "Los Cerros El Vergel"
sub_$barrio_2[sub_$barrio_2 == "Villa Tina"] <- "Villatina"
sub_$barrio_2[sub_$barrio_2 == "Santa Ines"] <- "Santa Inés"
sub_$barrio_2[sub_$barrio_2 == "Campo Valdes No.2"] <- "Campo Valdés No.2"
sub_$barrio_2[sub_$barrio_2 == "Progreso"] <- "El Progreso"
sub_$barrio_2[sub_$barrio_2 == "Progreso  no.2"] <- "Progreso No.2"
sub_$barrio_2[sub_$barrio_2 == "Doce De Octubre No.1"] <- "Doce de Octubre No.1"
sub_$barrio_2[sub_$barrio_2 == "Doce De Octubre No.2"] <- "Doce de Octubre No.2"
sub_$barrio_2[sub_$barrio_2 == "Santo Domingo Sabio No.1"] <- "Santo Domingo Savio No.1"
sub_$barrio_2[sub_$barrio_2 == "Santo Domingo Sabio No.2"] <- "Santo Domingo Savio No.2"
sub_$barrio_2[sub_$barrio_2 == "Moscu No.1"] <- "Moscú No.1"
sub_$barrio_2[sub_$barrio_2 == "Moscu No.2"] <- "Moscú No.2"
sub_$barrio_2[sub_$barrio_2 == "San Josela Cima No.1"] <- "San José La Cima No.1"
sub_$barrio_2[sub_$barrio_2 == "San Jose La Cima No.2"] <- "San José La Cima No.2"
sub_$barrio_2[sub_$barrio_2 == "Villa Del Socorro"] <- "Villa del Socorro"
sub_$barrio_2[sub_$barrio_2 == "El Playon De Los Comuneros"] <- "Playón de Los Comuneros"
sub_$barrio_2[sub_$barrio_2 == "Santa Fe"] <- "Santa Fé"
sub_$barrio_2[sub_$barrio_2 == "Santa Rosa De Lima"] <- "Santa Rosa de Lima"
sub_$barrio_2[sub_$barrio_2 == "Alejandro EchavarrÃa"] <- "Alejandro EchavarrÃ�a"
sub_$barrio_2[sub_$barrio_2 == "Mira Flores"] <- "Miraflores"
sub_$barrio_2[sub_$barrio_2 == "Ocho De Marzo"] <- "Ocho de Marzo"
sub_$barrio_2[sub_$barrio_2 == "Villa Lilliam"] <- "Villa Liliam"
sub_$barrio_2[sub_$barrio_2 == "Altos Del Poblado"] <- "Altos del Poblado"
sub_$barrio_2[sub_$barrio_2 == "Villa Lilliam"] <- "Villa Liliam"
sub_$barrio_2[sub_$barrio_2 == "La Loma De Los Bernal"] <- "La Loma de Los Bernal"
sub_$barrio_2[sub_$barrio_2 == "área De Expansión Belén Rincón"] <- "Área de Expansión Belén Rincón"
sub_$barrio_2[sub_$barrio_2 == "Carlos E Restrepo"] <- "Carlos E. Restrepo"
sub_$barrio_2[sub_$barrio_2 == "área De Expansión Belén Rincón"] <- "Área de Expansión Belén Rincón"
library(dplyr)
 
#  union two dataframes  without duplicates
nom_bar <- merge(barrios_med, sub_[!duplicated(sub_$barrio_2), ], by.x="NOMBRE", by.y="barrio_2",  all.x = TRUE)
names(nom_bar)
## [1] "NOMBRE"     "OBJECTID"   "CODIGO"     "SUBTIPO_BA" "SHAPEAREA" 
## [6] "SHAPELEN"   "cluster"
nombres <- data.frame(nom_bar$NOMBRE)
print(sum(is.na(nom_bar$cluster)))
## [1] 67
library(leaflet)
m <-leaflet(nom_bar)
#factpal <- colorFactor(topo.colors(4), nom_bar$cluster)
factpal <- colorFactor(palette = c("blue", "yellow", "green", "red","purple"), levels = c("1", "2", "3", "4", "5"))
m <- addPolygons(m,popup=nombres_barrios, color=~factpal(cluster))
m <- addTiles(m)
m